Data may be synchronized between different endpoints, such between different computing devices, in a wide variety of ways and using a wide array of connection topologies. For example, some systems or techniques may rely on endpoints to synchronize with a single (or multiple) centralized endpoints, such as computing servers. In other systems or techniques, endpoints might communicate directly with each other in a variety of ways, including in one or more decentralized or peer-to-peer topologies.
Different arrangements of endpoints and different communications topologies may each have their own advantages and disadvantages. As just one example, a system in which endpoints synchronize data directly with each other, perhaps without the use of a centralized or “server” endpoint, may have a variety of advantages. For example, in such a system endpoints might be able to communicate and synchronize data with other endpoints that are physically or logically “close” without being required to first (or perhaps to ever) synchronize data with a central server that might be located farther away than the synchronizing endpoints. As another example, if endpoints can communicate with a variety of other endpoints, a single point of failure—as might exist if a centralized server endpoint is required—may be eliminated. As another example, in some implementations at least a peer-to-peer synchronization system may be easier to set up or configure, if, for example, such set up doesn't require configuring one or more servers that have particular requirements such as always needing to be available to service requests from other endpoints or being able to scale to provide additional capacity.
However, decentralized systems may also have disadvantages, including at least some disadvantages that may in some cases be corrected or provided for in a topology that uses one or more centralized endpoints. For example, peer-to-peer endpoints may not always be available or able to synchronize data (in contrast to at least some “server” endpoints, which might be configured to be “always available”), and the lack of an available endpoint may mean sometimes that data may not be synchronized until or unless a particular endpoint is available. Another potential disadvantage may relate to determining how to efficiently synchronize data, particularly large amounts of data, between a set of endpoints connected in, perhaps, an arbitrary topology. In at least some cases, determining which endpoints should synchronize with which other endpoints, what data should be synchronized, and so on, is not a trivial problem, and solutions may be computationally intensive to find, may be sub-optimal (which may lead in turn to problems such as transferring more data than is necessary), and so on. Another potential disadvantage of decentralized systems is that information about the system of endpoints—such as characteristics of the endpoints, a holistic view of the data communicated by particular or all endpoints, and so on—may be more difficult to gather when no one endpoint, or a subset of endpoints, necessarily synchronizes or has access to all or at least a significant amount of the synchronized data. Yet another potential disadvantage may be related to applying security policies or other security-related functionality without necessarily being able to fully trust any particular peer machine; at least some of such security issues may in some implementations be ameliorated with the existence of one or more centralized and perhaps trusted endpoints.